package com.fenrirtec.aepp.common.api;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONObject;
import com.fenrirtec.aepp.common.dto.NewsNoticeDto;
import com.fenrirtec.aepp.common.service.NewsNoticeService;
import com.fenrirtec.aepp.common.service.impl.NewsNoticeServiceImpl;
import com.fenrirtec.aepp.common.support.JSONActionSupport;
import com.fenrirtec.core.definition.BaseDefinition.API;
import com.fenrirtec.core.definition.BaseDefinition.API.Common;
import com.fenrirtec.core.exception.DatabaseException;
import com.fenrirtec.core.exception.UnexpectedException;
import com.fenrirtec.core.utils.JsonUtils;

public class NewsNoticePublishAPI extends JSONActionSupport {

    private static final long serialVersionUID = 1L;

    private static final Logger logger = LoggerFactory.getLogger(NewsNoticePublishAPI.class);

    private String param;

    public String getParam() {
        return this.param;
    }

    public void setParam(String param) {
        this.param = param;
    }

    @Override
    protected List<ErrorInfo> doValidate() {
        return null;
    }

    @Override
    protected JSONObject doExecute() {

        NewsNoticeService service = new NewsNoticeServiceImpl();
        Boolean result = false;
        
        try {
            JSONObject jsonObj = JSONObject.parseObject(this.param);
            NewsNoticeDto newsNoticeDto = JsonUtils.toBean(jsonObj, NewsNoticeDto.class);
            newsNoticeDto.setCreateUser(getUserInfo().getLoginName());
            result = service.publish(newsNoticeDto);
        } catch (DatabaseException e) {
            if (logger.isErrorEnabled()) {
                logger.error("database error occurred.", e);
            }
            throw new JSONActionStatusException(API.Common.Status.DB_ERROR, e);
        } catch (UnexpectedException e) {
            if (logger.isErrorEnabled()) {
                logger.error("unexpected error occurred.", e);
            }
            throw new JSONActionStatusException(API.Common.Status.DB_ERROR, e);
        }

        JSONObject root = new JSONObject();
        root.put(Common.Response.RESULT, result);
        return root;
    }

}
